/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Data;

import java.awt.Image;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import Principal.Magia;
import java.awt.Rectangle;

/**
 *
 * @author rjimenez
 */
public class Jugador {


    private String nombre;
    private int vida;
    private int fuerza;
    private int magia;
    private int fuerzamagica;
    private int costomagico;
    private boolean invencible;
    private boolean visible;
    private int x,y,dx,dy;
    private int dir;
    private Image imagen;
    private String nombreimagen ="/img/arriba.png";
    private int alto;
    private int ancho;
    private int limitex1,limitex2, limitey1, limitey2;
    private ArrayList<Magia> hechizos;
            

    public Jugador() {
    }

    public Jugador(String nombre, int vida, int fuerza, int magia, int fuerzamagica, int costomagico) {
        
        ImageIcon img = new ImageIcon(this.getClass().getResource(nombreimagen));
        this.imagen = img.getImage();
        this.alto = imagen.getWidth(null);
        this.ancho = imagen.getWidth(null);
        this.nombre = nombre;
        this.vida = vida;
        this.fuerza = fuerza;
        this.magia = magia;
        this.fuerzamagica = fuerzamagica;
        this.costomagico = costomagico;
        dir = 1;
        this.limitex1 =0;
        this.limitey1 =100;
        this.hechizos = new ArrayList<Magia>();
        this.invencible = false;
        this.visible = true;
    }

    public int getCostomagico() {
        return costomagico;
    }

    public void setCostomagico(int costomagico) {
        this.costomagico = costomagico;
    }

    public int getFuerza() {
        return fuerza;
    }

    public void setFuerza(int fuerza) {
        this.fuerza = fuerza;
    }

    public int getFuerzamagica() {
        return fuerzamagica;
    }

    public void setFuerzamagica(int fuerzamagica) {
        this.fuerzamagica = fuerzamagica;
    }

    public int getMagia() {
        return magia;
    }

    public void setMagia(int magia) {
        this.magia = magia;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public int getVida() {
        return vida;
    }

    public void setVida(int vida) {
        this.vida = vida;
    }

    public boolean isInvencible() {
        return invencible;
    }

    public void setInvencible(boolean invencible) {
        this.invencible = invencible;
    }

    public int getLimitex2() {
        return limitex2;
    }

    public void setLimitex2(int limitex2) {
        this.limitex2 = limitex2 - ancho;
    }

    public int getLimitey2() {
        return limitey2;
    }

    public void setLimitey2(int limitey2) {
        this.limitey2 = limitey2 - alto;
    }

    public ArrayList<Magia> getHechizos() {
        return hechizos;
    }

    public void setHechizos(ArrayList<Magia> hechizos) {
        this.hechizos = hechizos;
    }

    public boolean isVisible() {
        return visible;
    }

    public void setVisible(boolean visible) {
        this.visible = visible;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public Image getImagen() {
        return imagen;
    }

    public void setImagen(Image imagen) {
        this.imagen = imagen;
    }

    public void girar()
    {
        System.out.println(dir);
        switch(dir)
            {
                case 1:
                    this.imagen =new ImageIcon(this.getClass().getResource("/img/arriba.png")).getImage();
                    break;

                case 2:
                    this.imagen =new ImageIcon(this.getClass().getResource("/img/der.png")).getImage();
                    break;

                case 3:
                    this.imagen =new ImageIcon(this.getClass().getResource("/img/abajo.png")).getImage();
                    break;

                case 4:
                    this.imagen =new ImageIcon(this.getClass().getResource("/img/izq.png")).getImage();
                    break;

            }

    }    
      
    public void restarVida(int impacto)
    {

        if(!invencible) //no pueden hacer daño
        {
            vida = vida - impacto;

            if(vida <= 0)
            {
                //esta muerto
            }

        }

    }

    public void recuperarVida(int cura)
    {
        vida = vida + cura;
    }

    public void ejecutarMagia()
    {
        if(costomagico > magia)
        {
            // no puedo ejecutar magia
            System.out.println("se acabo");
        }
        else
        {
            magia = magia - costomagico;


            switch(dir)
            {
                case 1:
                    hechizos.add(new Magia(x + ancho/2, y , limitex2, limitey2, dir));
                    break;

                case 2:
                    hechizos.add(new Magia(x + ancho, y + alto/2 , limitex2, limitey2, dir));
                    break;

                case 3:
                    hechizos.add(new Magia(x + ancho/2, y + alto, limitex2, limitey2, dir));
                    break;

                case 4:
                    hechizos.add(new Magia(x, y+alto/2 , limitex2, limitey2, dir));
                    break;

            }
        }
    }

    public void recuperarMagia(int aumento)
    {
        magia = magia + aumento;
    }

    public void mover()
    {
         x = x + dx;
         
         if( x < limitex1)
         {
             x = limitex1;
         }
         else if(x > limitex2)
         {
             x = limitex2;
         }
         y = y + dy;
         
         if ( y < limitey1)
         {
             y = limitey1;
         }
         else if( y > limitey2)
         {
             y = limitey2;
         }
    }
    
    public Rectangle getUbicacion()
    {
        return new Rectangle(x, y, alto, ancho);
    }
    
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_LEFT) {
            
            dir--;
            

            if(dir<1)
            {
                dir = 4;
            }
            girar();
        }

        if (key == KeyEvent.VK_RIGHT) {

            dir++;
            

            if(dir>4)
            {
                dir =1;
            }
            girar();
        
        }     

        if (key == KeyEvent.VK_UP) {

            switch(dir)
            {
                case 1:
                    dy =-1;
                    break;

                case 2:
                    dx =1;
                    break;

                case 3:
                    dy =1;
                    break;

                case 4:
                    dx = -1;
                    break;

            }

        }
        if (key == KeyEvent.VK_DOWN) {

            switch(dir)
            {
                case 1:
                    dy =1;
                    break;

                case 2:
                    dx =-1;
                    break;

                case 3:
                    dy =-1;
                    break;

                case 4:
                    dx = 1;
                    break;

            }
        
        } if (key == KeyEvent.VK_A) {

        }
        if (key == KeyEvent.VK_S) {
            
            ejecutarMagia();

        }

    }

    public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();

        
        if (key == KeyEvent.VK_UP) {

            switch(dir)
            {
                case 1:
                    dy =0;
                    break;

                case 2:
                    dx =0;
                    break;

                case 3:
                    dy =0;
                    break;

                case 4:
                    dx = 0;
                    break;

            }


        }
        if (key == KeyEvent.VK_DOWN) {

            switch(dir)
            {
                case 1:
                    dy =0;
                    break;

                case 2:
                    dx =0;
                    break;

                case 3:
                    dy =0;
                    break;

                case 4:
                    dx = 0;
                    break;

            }


        }
    }

}
